<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>
<script>
  var arr = function (nums, target) {
    const n = nums.length
    nums = nums.sort((a, b) => a - b) // 先排序 
    let arr = []
    for (let i = 0; i < n - 3; i++) {
      if (i > 0 && nums[i] === nums[i - 1]) { //过滤i重复的场景
        continue;
      }
      for (let k = n - 1; k > i + 1; k--) {
        if (k < n - 1 && nums[k] === nums[k + 1]) { //过滤k重复的场景
          continue;
        }
        let j = i + 1;
        let h = k - 1;
        while (j < h) {// 如果两个中间数碰撞了 说变所有的都遍历完了
          let sum = nums[i] + nums[j] + nums[h] + nums[k];
          if (sum > target) { //如果大于目标数 说明h大了
            h--;
          } else if (sum < target) {  //如果小于目标数 说明j小了
            j++
          } else {
            arr.push([nums[i], nums[j], nums[h], nums[k]])
            // 重点是这里 去除j和h重复的情况
            while (nums[j] === nums[j + 1]) j++;
            while (nums[h] === nums[h - 1]) h--;
            j++;
            h--;
          }
        }
      }

    }
    return arr
  };
  console.log(arr(nums = [1, 0, -1, 0, -2, 2], target = 0));
</script>

</html>